package com.zhangkunhao.notes.util;

import com.zhangkunhao.notes.entity.DO.User;
import com.zhangkunhao.notes.service.UserService;

import java.util.List;
import java.util.Objects;

/**
 * 与用户业务逻辑相关的工具类
 *
 * @author 张坤浩
 */
public class UserUtil {
    /**
     * 编辑用户信息的工具类
     *
     * @param userService
     * @param user
     * @return
     */
    public static int editInformation(UserService userService, User user) {
        int editRow;
        editRow = userService.updateById(user.getUserName(), user.getPassword(),
                user.getGender(), user.getHeight(), user.getBirthday(), user.getPayVirtue(),
                user.getGainVirtue(), user.getInitVirtue(), user.getId());
        return editRow;
    }

    /**
     * 判断该用户名是否存在的工具类
     *
     * @param userService
     * @param userName
     * @return
     */
    public static boolean judgeExistence(UserService userService, String userName) {
        User user = userService.queryByUserName(userName);
        return user != null;
    }

    /**
     * 判断用户是否访问过笑话或者参加过活动的工具类
     *
     * @param objList
     * @param user
     * @return
     */
    public static String judgeVisit(List<String> objList, User user) {
        //存放原先笑话访问者或活动参加者记录,不考虑同一个用户发表两个标题一样的笑话
        StringBuilder record = new StringBuilder();
        if (objList != null) {
            //判断是否该笑话之前没有被人访问或者该活动之前没有人报名
            if (objList.get(0) != null && !("".equals(objList.get(0)))) {
                //刷新当前记录,即恢复在数据库中的记录
                record.append(objList.get(0));
                //该用户首次访问该笑话或者该活动用户首次报名该活动并将记录更新
                if (!(UserUtil.myContains(objList.get(0), user.getUserName()))) {
                    record.append(user.getUserName()).append(",");
                }
            } else {
                record.append(user.getUserName()).append(",");
            }
        }
        return record.toString();
    }

    /**
     * 自定义contains方法，避免字符串比较时其不同内容的包含关系的干扰
     *
     * @param standard
     * @param waitingCheck
     * @return
     */

    public static boolean myContains(String standard, String waitingCheck) {
        //切割得到每条活动参加或者笑话访问记录
        if (Objects.nonNull(standard)) {
            String[] split = standard.split(",");
            for (String s : split) {
                //判断是否已经有过记录
                if (waitingCheck.equals(s)) {
                    return true;
                }
            }
        }
        return false;
    }


}
